package collectionFrame.Demo7_LinkedListExample;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class TwoNumSum {

    public int[] getTwoNum(int[] nums,int targer){

        //此 Map 存储的是数组中的元素和相应的索引位置
        Map<Integer,Integer> numIndexMap = new HashMap<>();

        //遍历原数组中的所有元素 保证时间复杂度是 n
        for (int i = 0; i < nums.length; i++) {
            //先假定原数组中的当前位置的元素是其中一个结果，需要找另一个结果(targer-nums[i])
            //如果另一个结果恰好已经存在于 numIndexMap 中，可以直接按照这个数字(key)找到相应的索引位置(value)
            if(numIndexMap.containsKey(targer-nums[i])) {
                //第一个结果的索引就是Map中的value，第二个结果的索引就是当前的 i
                return new int[]{numIndexMap.get(targer-nums[i]),i};
            }else{
                //如果没有找到这个目标结果，把当前数组放在Map中，为了下一个数字进行查找
                numIndexMap.put(nums[i],i);
            }
        }

        return null;

    }

    public static void main(String[] args) {
        int[] resultArr = new TwoNumSum().getTwoNum(new int[]{2,7,11,15},26);

        System.out.println(Arrays.toString(resultArr));
    }

}
